Det går inte att "add" JLabel till JToolBar när skärmens storlek är ändrat.

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

Det går inte att "add" JLabel till JToolBar när skärmens storlek är ändrat.

Hej, alla
Jag skapar en vanlig program som som man kan redigera dokument fil. Ni kan tänka NotePad++
Min kod är inte klart med några saker (Jag måste göra lite till med lyssnare) och dessa saker jag kan lösa själv.
Men jag har en små problem med JLabel och JToolBar som jag vet inte hur man löser. Orsaken varför jag använder JLabel är jag gillar inte JButtons design och för mig det spelar ingen roll JLabel eller JButton.

import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.text.DefaultEditorKit; public class Uppgift2_Kap14 extends JFrame{ private JTextArea area = new JTextArea(10,60); private JFileChooser dialog = new JFileChooser(System.getProperty("user.dir")); private String aktuellFil = "namnlös"; private boolean ändrad = false; private JLabel textnamn = new JLabel(aktuellFil); private JPanel toolbarPanel = new JPanel(); JToolBar verktyg = new JToolBar(); JToolBar textbar = new JToolBar(); public Uppgift2_Kap14(){ area.setFont(new Font("Monospaced", Font.PLAIN, 12)); JScrollPane scroll = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); add(scroll, BorderLayout.CENTER); JMenuBar mb = new JMenuBar(); setJMenuBar(mb); JMenu arkiv = new JMenu("Akriv"); JMenu redi = new JMenu("Redigera"); mb.add(arkiv); mb.add(redi); JInternalFrame f = new JInternalFrame(); f.setVisible(true); arkiv.add(ny); arkiv.add(öppna); arkiv.add(spara); arkiv.add(sparaSom); arkiv.addSeparator(); arkiv.add(avsluta); for(int i = 0; i<4; i++) arkiv.getItem(i).setIcon(null); //Inga ikoner på menyn redi.add(klipp); redi.add(kopiera); redi.add(klistra); redi.getItem(0).setText("Klipp ut"); redi.getItem(1).setText("Kopiera"); redi.getItem(2).setText("Klistra in"); add(toolbarPanel, BorderLayout.NORTH); toolbarPanel.add(verktyg, BorderLayout.NORTH); verktyg.add(ny); verktyg.add(öppna); verktyg.add(spara); verktyg.addSeparator(); JButton cut = verktyg.add(klipp), cop= verktyg.add(kopiera), pas = verktyg.add(klistra); cut.setText(null); cut.setIcon(new ImageIcon("cut.gif")); cop.setText(null); cop.setIcon(new ImageIcon("copy.gif")); pas.setText(null); pas.setIcon(new ImageIcon("paste.gif")); toolbarPanel.add(textbar, BorderLayout.SOUTH); textbar.add(textnamn); //Man lägger JLabel i JToolBar spara.setEnabled(false); sparaSom.setEnabled(false); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); area.addKeyListener(k1); setTitle(aktuellFil); setVisible(true); } private KeyListener k1 = new KeyAdapter(){ public void keyPressed(KeyEvent e){ ändrad = true; spara.setEnabled(true); sparaSom.setEnabled(true); } }; Action ny = new AbstractAction("Ny", new ImageIcon("new.gif")){ public void actionPerformed(ActionEvent e){ sparaGammal(); aktuellFil = "namnlös"; textnamn = new JLabel(aktuellFil); setTitle(aktuellFil); /*ändrad = false; spara.setEnabled(false); sparaSom.setEnabled(false);*/ textbar.addSeparator(); textbar.add(textnamn); //Man läger ny JLabel i JToolbar } }; Action öppna = new AbstractAction("Öppna...", new ImageIcon("open.gif")){ public void actionPerformed(ActionEvent e){ sparaGammal(); if(dialog.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){ läsInFil(dialog.getSelectedFile().getAbsolutePath()); } sparaSom.setEnabled(true); textnamn.setText(aktuellFil); textbar.add(textnamn); } }; Action spara = new AbstractAction("Spara...", new ImageIcon("save.gif")){ public void actionPerformed(ActionEvent e){ if(!aktuellFil.equals("namnlös")) sparaFil(aktuellFil); else sparaFilSom(); } }; Action sparaSom = new AbstractAction("Spara som..."){ public void actionPerformed(ActionEvent e){ sparaFilSom(); } }; Action avsluta = new AbstractAction("Avsluta"){ public void actionPerformed(ActionEvent e){ sparaGammal(); System.exit(0); } }; ActionMap m = area.getActionMap(); Action klipp = m.get(DefaultEditorKit.cutAction); Action kopiera = m.get(DefaultEditorKit.copyAction); Action klistra = m.get(DefaultEditorKit.pasteAction); private void sparaFilSom(){ if(dialog.showSaveDialog(null)==JFileChooser.APPROVE_OPTION) sparaFil(dialog.getSelectedFile().getAbsolutePath()); } private void sparaGammal(){ if(ändrad){ if(JOptionPane.showConfirmDialog(this, "Skall filen" + aktuellFil + " sparas?", "", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION) sparaFil(aktuellFil); } } private void läsInFil(String filnamn){ try{ FileReader r = new FileReader(filnamn); area.read(r, null); r.close(); aktuellFil = filnamn; setTitle(aktuellFil); ändrad = false; } catch(IOException e){ Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(this, "Det går inte att hitta filen" + aktuellFil); } } private void sparaFil(String filnamn){ try{ FileWriter w = new FileWriter(filnamn); area.write(w); w.close(); aktuellFil = filnamn; setTitle(aktuellFil); ändrad = false; spara.setEnabled(false); } catch(IOException e){} } public static void main (String []args){ new Uppgift2_Kap14(); } }

Problem med min kod är, när JFrames storlek är ändrat, program låter "inte" att skapa ny JLabel och lägga det till JToolBar. Om man ändrar inte detta, program låter att lägga JLabel hur mycket som helst. Vad är orsak? Jag har ingen aning. Kan någon hjälpa mig?
Och jag förstår inte varför är det så.