JFrame не показывает более одной панели
Я пытаюсь создать простую панель выбора цвета в Java для более крупного проекта. У меня есть рамка, которая должна включать панель для ползунков RGB, и три текстовых поля показывают их значения. Я могу добавить панель слайдера без проблем, но когда я пытаюсь добавить панель текстового поля, все портится, и ни одна из панелей не отображается. Мой единственный вопрос, как исправить эту проблему панелей. Спасибо.
Вот мой код:
//importing necessary libraries
import java.awt.*;
import javax.swing.*;
//Object extends JFrame
public class FrameObject extends JFrame
{
//declaring the panels, one for the color sliders and the other for the text fields
private JPanel color_panel;
private JPanel textFileds;
//arrays to hold the J components for further efficiency
private JSlider[] RGB = new JSlider[3];
private JTextField[] RGBFileds = new JTextField[3];
public FrameObject()
{
//Preparing the frame
super("Color panel");
setVisible(true);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//A grid layout to give desired orientation
color_panel = new JPanel(new GridLayout(3, 1));
textFileds = new JPanel(new GridLayout(3, 1));
//initializing the individual components through a loop in the arrays
for(int c=0; c<RGB.length; c++)
{
RGB[c] = new JSlider(SwingConstants.HORIZONTAL,0,255,100);
RGBFileds[c] = new JTextField(12);
//Adding each component to its specific panel
color_panel.add(RGB[c]);
textFileds.add(RGBFileds[c]);
}
//adding the sub panels to the main panel.
add(color_panel,BorderLayout.CENTER);
add(textFileds,BorderLayout.EAST);
}
}
public class FrameTest
{
public static void main(String[] args)
{
FrameObject f = new FrameObject();
}
}
3 ответа
Вы должны упаковать свой кадр.
//importing necessary libraries
import java.awt.*;
import javax.swing.*;
//Object extends JFrame
public class FrameObject extends JFrame
{
//declaring the panels, one for the color sliders and the other for the text fields
private JPanel color_panel;
private JPanel textFileds;
//arrays to hold the J components for further efficiency
private JSlider[] RGB = new JSlider[3];
private JTextField[] RGBFileds = new JTextField[3];
public FrameObject()
{
//Preparing the frame
super("Color panel");
setVisible(true);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//A grid layout to give desired orientation
color_panel = new JPanel(new GridLayout(3, 1));
textFileds = new JPanel(new GridLayout(3, 1));
//initializing the individual components through a loop in the arrays
for(int c=0; c<RGB.length; c++)
{
RGB[c] = new JSlider(SwingConstants.HORIZONTAL,0,255,100);
RGBFileds[c] = new JTextField(12);
//Adding each component to its specific panel
color_panel.add(RGB[c]);
textFileds.add(RGBFileds[c]);
}
//adding the sub panels to the main panel.
add(color_panel,BorderLayout.CENTER);
add(textFileds,BorderLayout.EAST);
pack();
}
public static void main(String[] args)
{
FrameObject f = new FrameObject();
}
}
В конце конструктора FrameObject
, вам нужно добавить следующую строку.
this.pack();
Метод pack устанавливает размер кадра так, чтобы все его содержимое было на уровне или выше их предпочтительных размеров.
Принимать setVisible(true);
и сделайте это последним, что вы позвоните после того, как вы установили пользовательский интерфейс
public FrameObject() {
//Preparing the frame
super("Color panel");
//setVisible(true);
//setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//...
//adding the sub panels to the main panel.
add(color_panel, BorderLayout.CENTER);
add(textFileds, BorderLayout.EAST);
pack();
setVisible(true);
}
Swing ленив, когда дело доходит до обновления пользовательского интерфейса, он позволяет добавлять и удалять ряд компонентов в "пакетах", не обновляя пользовательский интерфейс или не выполняя новый этап макета, который может быть дорогостоящим.
Если вам нужно динамически обновить пользовательский интерфейс, не забудьте позвонить revalidate
с последующим repaint
когда вы хотите обновить пользовательский интерфейс
Также предпочитаю pack
над setSize
как pack
будет учитывать декорации кадров и различия в показателях шрифта и других вещах, которые могут изменяться между платформами и системами