цветовая схема JDialog
Модератор: Absurd
Подскажите, как правильно изменить цветовую схему отдельно-взятого окна? Хочется выделить цветом вспомогательные окна (JDialog), не меняя при этом фон/цвет элементов главного окна приложения.
J2SE1.5/SWING
J2SE1.5/SWING
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Genix, а можно поинтересоваться, что такое "цветовая схема"?
и как её можно изменить для всего приложения вместе?
Я так понимаю, что примитивный вариант:
не подойдёт?
А если хочется выделить лишь определённые "вспомогательные" окна, то можно:
и от него уже инстанциировать то, что требуется.
Но это примитивная работа с цветом.
А что подразумевается под "цветовой схемой" ?
и как её можно изменить для всего приложения вместе?
Я так понимаю, что примитивный вариант:
Код: Выделить всё
JDialog dialog = new JDialog();
dialog.setBackground(Color.RED);
А если хочется выделить лишь определённые "вспомогательные" окна, то можно:
Код: Выделить всё
public class AuxiliaryDialog extends JDialog{
//...
void init(... ) {
setBackground(Color.RED);
//...
}
Но это примитивная работа с цветом.
А что подразумевается под "цветовой схемой" ?
Look'n'Feel например ]Oscar писал(а):Genix, а можно поинтересоваться, что такое "цветовая схема"?
и как её можно изменить для всего приложения вместе?
Я так понимаю, что примитивный вариант:
Код: Выделить всё
JDialog dialog = new JDialog();
dialog.setBackground(Color.RED);
[/quote]
нет, не подходит.
ибо все добавляемые в этот Dialog Panel'ы имеют цвет по умолчанию, вместо Color.RED
то же самое, все добавляемые JPanel'ы имеют свой цвет фонаА если хочется выделить лишь определённые "вспомогательные" окна, то можно:
и от него уже инстанциировать то, что требуется.Код: Выделить всё
public class AuxiliaryDialog extends JDialog{ //... void init(... ) { setBackground(Color.RED); //... }
Но это примитивная работа с цветом.
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Код: Выделить всё
JDialog dialog = new JDialog();
dialog.setUndecorated(true);
dialog.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
JComponent.setUI(ComponentUI newUI)
или так?
Oscar писал(а):Код: Выделить всё
JDialog dialog = new JDialog(] так? [/quote] не совсем. ;) в этом случае просто появляется "дурняковое" обрамление окна [quote] [url=http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html#setUI(javax.swing.plaf.ComponentUI)]JComponent.setUI(ComponentUI newUI)[/url] или так?[/quote] не понял как его готовить. для getRootPane/JPanel setUI не доступен, а для каждого элемента по отдельности.... Думал может есть метод, убивающих всех зайцев одним выстрелом ;) ))
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Код: Выделить всё
import java.awt.Point;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Sample extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jp = new JPanel();
public Sample(int type, String name)
{
this.setTitle(name);
try
{
switch(type) {
case 1:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
case 3:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
default:
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
}
catch(Exception e){e.printStackTrace();};
jp.add(new JLabel("label"));
jp.add(new JButton("button"));
setContentPane(jp);
}
public static void showDialog(int type) {
String name = "crossPlatform";
Point location = new Point(0, 0);
switch(type) {
case 1:
name = "windows";
location = new Point(400, 0);
break;
case 2:
name = "motif";
location = new Point(0, 300);
break;
case 3:
name = "metal";
location = new Point(400, 300);
break;
default:
name = "crossPlatform";
location = new Point(0, 0);
}
Sample s = new Sample(type, name);
s.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
s.setSize(400, 300);
s.setLocation(location);
s.setVisible(true);
}
public static void main(String[] args)
{
Sample.showDialog(1);
Sample.showDialog(2);
Sample.showDialog(3);
Sample.showDialog(0);
}
}
А хоть так пойдёт? ...
WindowsLookAndFeel наверное лучше не использовать, т.к. повредит кроссплатформености.
А остальные, как бы, входят в swing, потому думаю, что должны поддерживаться везде (могу и ошибаться).
Offtopic: С какой бы радостью вместо своей HTTP Авторизации на PHP я бы сейчас занимался вот таким вот расскрашиванием окошек ...
судя по тому, что оно делает ДА.Oscar писал(а): А хоть так пойдёт? ...
пытаюсь вспомнить, почему у меня не получилось сделать тоже самое
