Я создаю программу, показывающую температуру для данного места (см. Скриншот). Я хочу отобразить результат в displayPanal (JPanal). Я поместил компонент краски в расширенный класс displayPanel. Но это ничего не показывает. Я просто попытался отобразить «Hello» с методом g.drawString для тестирования, но он ничего не показывает. Поэтому я застрял, чтобы продолжить.paintComponent ничего не показывает
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}//main
private static void createAndShowGUI(){
GridLayout panelLayout = new GridLayout(3,0);
panelLayout.setHgap(10);
panelLayout.setVgap(10);
final JPanel panel = new JPanel(panelLayout);
//location label
JLabel locationLabel = new JLabel("Location");
panel.add(locationLabel);
//text Field for location
final JTextField locationText = new JTextField();
panel.add(locationText);
//month label
JLabel monthLabel = new JLabel("Month of the Year");
panel.add(monthLabel);
//comboBox for months
String[] months = new String[] {"","January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
JComboBox<String> monthList = new JComboBox<>(months);
panel.add(monthList);
//JCheckBox
JCheckBox celsiusCheck = new JCheckBox("Show Celsius Temperature");
panel.add(celsiusCheck);
//Button inside button pane
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 150, 0, 0));
JButton goButton = new JButton("Go");
buttonPane.add(goButton);
//JPanel for display
JPanel displayPanel = new JPanel();
displayPanel.setBorder(BorderFactory.createLineBorder(Color.black));
//Create and setup window
JFrame frame = new JFrame("Midterm Project");
frame.setSize(500, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel(new GridLayout(3, 1));
mainPanel.add(panel);
mainPanel.add(buttonPane);
mainPanel.add(displayPanel);
//Set up the content pane.
mainPanel.setOpaque(true); //content panes must be opaque
frame.setContentPane(mainPanel);
//Display the window.
frame.pack();
frame.setVisible(true);
}//createAndShowGUI()
class displayPanel extends JPanel {
double fahrenheit = generateRand();
//double celsius = getCelsius(fahrenheit);
String celsius = Double.toString(getCelsius(fahrenheit));
@Override
public void paintComponent(Graphics g) {
g.drawString("Hello", 10, 10);
}//paintComponent();
}
Том вы строите «программы»? ты из контрольной меня тогда ??? – gpasch
'displayPanel' следует называть' DisplayPanel', и он должен переопределять 'getPreferredSize()' для возврата логического размера для этого компонента. 'public void paintComponent (Graphics g) { g.drawString (" Hello ", 10, 10);' должен быть 'public void paintComponent (Graphics g) {super.paintComponent (g); * paint BG */ g.drawString («Hello», 10, 10); ' –
Вопрос закрыт как дубликат, потому что в предыдущем вопросе вам была предоставлена ссылка на учебник Swing, который показывает, как выполняется обычная покраска. Код, который вы опубликовали, НЕ выглядит как демо-код. По какой-то причине вам была дана ссылка на учебное пособие. Чтобы дать вам скелетный код, чтобы следовать. Все, что вам нужно сделать, это изменить код рисования. Изучите рабочий код. – camickr