Страница 1 из 1
цветовая схема JDialog
Добавлено: 15 ноя 2005, 10:06
Genix
Подскажите, как правильно изменить цветовую схему отдельно-взятого окна? Хочется выделить цветом вспомогательные окна (JDialog), не меняя при этом фон/цвет элементов главного окна приложения.
J2SE1.5/SWING
Добавлено: 15 ноя 2005, 10:38
Oscar
Genix, а можно поинтересоваться, что такое "цветовая схема"?
и как её можно изменить для всего приложения вместе?
Я так понимаю, что примитивный вариант:
Код: Выделить всё
JDialog dialog = new JDialog();
dialog.setBackground(Color.RED);
не подойдёт?
А если хочется выделить лишь определённые "вспомогательные" окна, то можно:
Код: Выделить всё
public class AuxiliaryDialog extends JDialog{
//...
void init(... ) {
setBackground(Color.RED);
//...
}
и от него уже инстанциировать то, что требуется.
Но это примитивная работа с цветом.
А что подразумевается под "цветовой схемой" ?
Добавлено: 15 ноя 2005, 11:05
Genix
Oscar писал(а):Genix, а можно поинтересоваться, что такое "цветовая схема"?
и как её можно изменить для всего приложения вместе?
Look'n'Feel например ]
Я так понимаю, что примитивный вариант:
Код: Выделить всё
JDialog dialog = new JDialog();
dialog.setBackground(Color.RED);
не подойдёт?
[/quote]
нет, не подходит.
ибо все добавляемые в этот Dialog Panel'ы имеют цвет по умолчанию, вместо Color.RED
А если хочется выделить лишь определённые "вспомогательные" окна, то можно:
Код: Выделить всё
public class AuxiliaryDialog extends JDialog{
//...
void init(... ) {
setBackground(Color.RED);
//...
}
и от него уже инстанциировать то, что требуется.
Но это примитивная работа с цветом.
то же самое, все добавляемые JPanel'ы имеют свой цвет фона
Добавлено: 15 ноя 2005, 11:20
Oscar
Код: Выделить всё
JDialog dialog = new JDialog();
dialog.setUndecorated(true);
dialog.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
так?
JComponent.setUI(ComponentUI newUI)
или так?
Добавлено: 15 ноя 2005, 14:47
Genix
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 не доступен, а для каждого элемента по отдельности.... Думал может есть метод, убивающих всех зайцев одним выстрелом ;) ))
Добавлено: 15 ноя 2005, 16:35
Oscar
Код: Выделить всё
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 я бы сейчас занимался вот таким вот расскрашиванием окошек ...
Добавлено: 15 ноя 2005, 16:49
Genix
Oscar писал(а):
А хоть так пойдёт? ...
судя по тому, что оно делает ДА.
пытаюсь вспомнить, почему у меня не получилось сделать тоже самое

))