15. december 2008 - 12:17Der er
10 kommentarer og 1 løsning
Friggin layout bugger
Hej eksperter,
Følgende kode får det tredje JPanel, Panel_Output, til at fylde hele vinduet og ikke placere sig som angivet ved koordinaterne:
package CircularPies;
import java.awt.Color;
import javax.swing.*;
@SuppressWarnings("serial") public class Frame_Main extends JFrame { private JPanel Panel_Drawing = new JPanel(null); private JPanel Panel_Input = new JPanel(null); private JPanel Panel_Output = new JPanel(null);
private JLabel Label_Input_Count = new JLabel("Count:"); private JSpinner Spinner_Input_Count = new JSpinner();
private JLabel Label_Output_Total1 = new JLabel("Total points:"); private JLabel Label_Output_Total2 = new JLabel("0"); private JLabel Label_Output_Inside1 = new JLabel("Points inside:"); private JLabel Label_Output_Inside2 = new JLabel("0"); private JLabel Label_Output_Outside1 = new JLabel("Points outside:"); private JLabel Label_Output_Outside2 = new JLabel("0"); private JLabel Label_Output_Ratio1 = new JLabel("Point ratio:"); private JLabel Label_Output_Ratio2 = new JLabel("N/A"); private JLabel Label_Output_Result1 = new JLabel("Resulting pi:"); private JLabel Label_Output_Result2 = new JLabel("N/A");
public Frame_Main() { // Text definition super("Circular Pies");
Jeg gider ærlig talt ikke bruge tid på at sætte mig ind i Layout Managers, da jeg, som du nok har opdaget, primært beskæftiger mig med C#. Derfor vil jeg, i de to-tre visuelle Java-projekter jeg når at lave, hellere anvende null-LM, da jeg så kan spare besværet ved at sætte mig ind i systemet, der kun anvendes i et enkelt sprog. Egentlig er det meningen, at de studerende (Programmering C, HTX) skal anvende NetBeans' drag-and-drop-system og slet ikke koncentrere sig om design af frames, men da NetBeans' generelle funktionalitet er elendig i forhold til Ellipse, har jeg personeligt valgt at skrive alle mine programmer (hvilket forresten ikke bliver mange inden foråret) i det. Giver det mening?
Det er rigtigt at .NET kun kommer med dock og anchor funktionalitet og ikke en LayoutManager, men søger du på nettet vil du finde mange implementationer af LayoutManager for .NET !
Synes godt om
Slettet bruger
17. december 2008 - 07:43#7
Hmm, jeg har aldrig før hørt om Visual Editor, men det lader til at være udmærket :) Tak. Jeg kan ikke rigtig se, hvad manager-systemet gør godt for - ligegyldigt på hvilken platform det er baseret. For mig at se, er det altid lettest selv at opgive elementers opførsel ved størrelsesændringer (tager trods alt kun et par minutter) end at skabe store layout-systemer. Eller hvad?
Pointen ved LayoutManager er ikke at den sparer udvikleren for at placere og size komponenterne. Pointen er at den dynamisk resizer og eventuelt omplacerer, hvis brugerne runtime resizer vinduet.
Synes godt om
Slettet bruger
17. december 2008 - 16:28#9
I know. Men det er jo også nemt at gøre efter uden LayoutManagers... Typist bare skrive en kort formel til justering af Top og Left og/eller Width og Height. Jeg plejer at være 4-5 min. om at fikse 2-3 komponenter således... I hånden vel at mærke. Hvis Microsoft tænkte ud af deres kasseformede celle og lavede et system til automatisering af proceduren, ville det uden tvivl være at foretrække over LayoutManagers.
public class LMFun extends JFrame implements ChangeListener, ActionListener { private static final int MIN_W = 100; private static final int MIN_H = 100; private static final int DEF_W = 200; private static final int DEF_H = 200; private static final int MAX_W = 500; private static final int MAX_H = 500; public LMFun() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Arnes LM fun"); setLayout(new FlowLayout()); for(int i = 1; i <= 12; i++) { getContentPane().add(createPanel(i)); } pack(); } private static final Color[] cols = { Color.GRAY, Color.WHITE, Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW, Color.CYAN, Color.MAGENTA, Color.ORANGE, Color.PINK }; private JPanel createPanel(int no) { JPanel res = new JPanel(); if(no % 2 == 0) { res.setLayout(new GridLayout(2, 2)); res.add(createButton(cols[no % cols.length])); res.add(createButton(cols[no % cols.length])); res.add(createButton(cols[no % cols.length])); res.add(createButton(cols[no % cols.length])); } else { res.setLayout(new BorderLayout()); res.add(createButton(cols[no % cols.length]), BorderLayout.CENTER); res.add(createButton(cols[no % cols.length]), BorderLayout.NORTH); res.add(createButton(cols[no % cols.length]), BorderLayout.SOUTH); res.add(createButton(cols[no % cols.length]), BorderLayout.WEST); res.add(createButton(cols[no % cols.length]), BorderLayout.EAST); } JSlider verjs = new JSlider(JSlider.VERTICAL, MIN_H, MAX_H, DEF_H); verjs.addChangeListener(this); JSlider horjs = new JSlider(JSlider.HORIZONTAL, MIN_W, MAX_W, DEF_W); horjs.addChangeListener(this); JPanel wrapper = new JPanel(); wrapper.setLayout(new BorderLayout()); wrapper.add(res, BorderLayout.CENTER); wrapper.add(verjs, BorderLayout.EAST); wrapper.add(horjs, BorderLayout.SOUTH); wrapper.setBorder(BorderFactory.createTitledBorder("Panel #" + no)); wrapper.setPreferredSize(new Dimension(DEF_W, DEF_H)); return wrapper; } private JButton createButton(Color c) { JButton res = new JButton(); res.setBackground(c); res.setText("Bla"); res.addActionListener(this); return res; } @Override public void stateChanged(ChangeEvent e) { JSlider js = (JSlider)e.getSource(); JPanel jp = (JPanel)js.getParent(); if(!js.getValueIsAdjusting()) { if(js.getOrientation() == JSlider.VERTICAL) { jp.setPreferredSize(new Dimension(jp.getWidth(), js.getValue())); } else if (js.getOrientation() == JSlider.HORIZONTAL) { jp.setPreferredSize(new Dimension(js.getValue(), jp.getHeight())); } jp.revalidate(); } } @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(this, "Du må ikke klikke her"); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame f = new LMFun(); f.setVisible(true); } }); } }
Synes godt om
Slettet bruger
18. december 2008 - 07:29#11
Uha. Tak for koden, men jeg tror ikke, jeg kommer til at bruge den. Jeg fandt fejlen den 15., og, forhåbentligt, kommer jeg aldrig til at arbejde med GUI i Java igen ;) Længe leve konsolapplikationer!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.