2016-03-13 5 views
-1

enter image description here Я создаю программу, показывающую температуру для данного места (см. Скриншот). Я хочу отобразить результат в 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(); 
} 
+0

Том вы строите «программы»? ты из контрольной меня тогда ??? – gpasch

+0

'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); ' –

+1

Вопрос закрыт как дубликат, потому что в предыдущем вопросе вам была предоставлена ​​ссылка на учебник Swing, который показывает, как выполняется обычная покраска. Код, который вы опубликовали, НЕ выглядит как демо-код. По какой-то причине вам была дана ссылка на учебное пособие. Чтобы дать вам скелетный код, чтобы следовать. Все, что вам нужно сделать, это изменить код рисования. Изучите рабочий код. – camickr

ответ

0
JPanel displayPanel = new JPanel(); 

Должно быть ...

JPanel displayPanelVar = new displayPanel(); 

Судя по ней!

displayPanel было изменено на displayPanelVar, поскольку имя переменной не может быть такой же, как класс, может быть, стоит переименовать имя класса displayPanel к DisplayPanel

+0

Но все еще ошибка, и я не могу этого сделать. «Нет экземпляра экземпляра типа MidyermProjectTest2 доступен – Tom

+2

@Tom. Вы только что описали совершенно другую проблему, которая не связана с фрагментом кода, который вы предоставили – MadProgrammer

Смежные вопросы