Здравствуйте, я любитель, пытающийся выучить / улучшить свое понимание Java, написав оценочную карту для стрельбы из лука.Я пытаюсь создать графический интерфейс и до сих пор успешно выполнил на JPanel ряд из 18 этикеток разных размеров и цветов, подходящих для оценки дюжины.
Затем я попытался добавить пять из этих «панелей этикеток» в другую.панель для создания сетки и избавления от необходимости создавать и добавлять до 150 ярлыков в некоторых случаях.Безуспешно, поскольку панели оригинальных этикеток не будут отображаться.Все панели отображаются на JFrame
. Я пробовал несколько разных способов заставить код работать, используя учебник по Java и поиск в Интернете и изучая подобные проблемы на этом сайте, но я собираюськруг в кругах.Должно быть, я что-то упустил где-то и надеюсь, что вы сможете помочь.
Я использую Java 6 и JGrasp v1.8.8_01 в качестве IDE
Следующий код для панели метокбыло сокращено, поскольку большая часть повторяется.
import javax.swing.*;
import java.awt.*;
public class ArrowScoreLabels extends JPanel{
public JPanel createContentPane(){
JPanel panelForLabels = new JPanel();
panelForLabels.setLayout(null);
//Code creates 18 labels, sets the size, position, background colours, border and
//font and adds the labels to the’panelForLabels
JLabel scorelabel1;
scorelabel1 = new JLabel("",JLabel.CENTER);
scorelabel1.setBorder(BorderFactory.createLineBorder(Color.black));
scorelabel1.setFont(new Font("Arial", Font.ITALIC, 26));
scorelabel1.setLocation(0, 0);//first value differs for each label
scorelabel1.setSize(35, 35);
scorelabel1.setOpaque(true);
panelForLabels.add(scorelabel1);
panelForLabels.setOpaque(true);
return panelForLabels;
}
}
При запуске следующего класса на панели отображаются 18 меток
import javax.swing.*;
import java.awt.*;
public class TestArrowScoreLabels {
private static void createAndShowArrowLabels() {
//Create and set up the window.
JFrame frame = new JFrame("To score one dozen");
//Create and set up the content pane.
ArrowScoreLabels asl = new ArrowScoreLabels();
frame.setContentPane(asl.createContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(676, 73);
frame.setVisible(true);
}
//Main method to show the GUI/
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
createAndShowArrowLabels();
}
});
}
}
Следующий код для второй панели аналогичен, компилируетсяно показывает только второй зеленый JPanel, а не панель с метками.
import javax.swing.*;
import java.awt.*;
public class FiveDozenScorePanel{
public JPanel createContentPane(){
//A bottom JPanel on which to place five dozenpanels.
JPanel fivedozenpanel = new JPanel();
fivedozenpanel.setLayout(null); //requires absolute spacing
fivedozenpanel.setSize(676,185);
fivedozenpanel.setBackground(Color.green);
//Label panels for five dozen
ArrowScoreLabels dozenscorepanel1, dozenscorepanel2,
dozenscorepanel3,dozenscorepanel4,dozenscorepanel5;
//Create the 5 dozenscorelabels.
dozenscorepanel1 = new ArrowScoreLabels();
dozenscorepanel1.setLocation(5,5);//y value changes for each panel
fivedozenpanel.add(dozenscorepanel1);//plus the other 4
fivedozenpanel.setOpaque(true);
return fivedozenpanel;
}
private static void createAndShowDozenPanels() {
JFrame frame = new JFrame("To score five dozen");
FiveDozenScorePanel fdsp = new FiveDozenScorePanel();
frame.setContentPane(fdsp.createContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Display the window
frame.setSize(700, 233);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
createAndShowDozenPanels();
}
});
}
}
Я также пробовал frame.getContentPane (). add (fdsp);- frame.pack ();и так много читал о методах рисования, что я совершенно запутался.Я могу заставить изображение ArrowScoreLabels отображаться непосредственно на JFrame, а не на JPanel, а только на одном из них, а не на пяти.
Я был бы признателен за указание в правильном направлении.Спасибо за потраченное время.
Обновление - 14 декабря 2010 г. Мне удалось отобразить панель ForLabels Jpanel на другой Jpanel на JFrame.Это было сделано путем добавления следующего кода в класс ArrowScoreLabels.Исходный метод createContentPane () был переименован в createRowOne ().Панель ForLabels была красного цвета, а пятидюймовая панель желтого цвета, чтобы выяснить, какая из них была.Однако мне удалось только убедить программу отобразить одну строку меток, несмотря на большие эксперименты и исследования.
public static JPanel createContentPane(){
//Bottom panelto hold rows of labels
JPanel fivedozenscorepanel = new JPanel();
fivedozenscorepanel.setLayout(null);//requires absolute spacing
fivedozenscorepanel.setSize(660,180);
fivedozenscorepanel.setBackground(Color.yellow);
fivedozenscorepanel.add(createRowOne());
fivedozenscorepanel.setOpaque(true);
return fivedozenscorepanel;
}
Единственный способ отобразить 5 строк по 18 меток - это создать все 90 строк.класс ArrowScoreLabels, а затем добавьте их в один JPanel, используя абсолютный интервал, а затем в JFrame.Я принял к сведению совет pstantons - спасибо за это - и я изучаю использование MigLayout Manager.