2013-09-15 2 views
0

Я пробовал несколько способов, но все еще не нашел решение. У меня есть jgraph в кадре, и я хочу добавить Jbutton в этот фрейм также в определенном месте. Однако я получаю только один из них, когда запускаю программу, потому что они расширяются до всего окна. Любые идеи, как это исправить?JButton и jgraphx не будут отображаться в то же время

Заранее спасибо.

public class GUIquery extends JFrame { 

    JFrame frame; 
    static JGraph jgraph; 
    final mxGraph graph = new mxGraph(); 
    final mxGraphComponent graphComponent = new mxGraphComponent(graph); 

    public GUIquery() { 
     super("Test"); 
     GraphD(); 
     imgbtn(); 
    } 

    public void GraphD() { 
     Object parent = graph.getDefaultParent(); 
     graph.getModel().beginUpdate(); 
     try { 
      ........   
     }catch { 
      ........ 
     } finally { 
      graph.getModel().endUpdate(); 
     } 
     getContentPane().add(graphComponent);  
    }  

    public void imgbtn() { 
     JPanel jpanel = new JPanel(); 
     jpanel.setSize(100, 100); 
     jpanel.setLocation(1200, 60); 
     JButton imgbtn = new JButton("Export as Image"); 
     imgbtn.setSize(100, 100); 
     imgbtn.setLocation(1200, 60); 
     jpanel.add(imgbtn); 
     add(jpanel); 
    } 

    public static void main(String[] args) { 
     GUIquery frame = new GUIquery(); 
     frame.setLayout(null); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 320); 
     frame.setVisible(true); 
    } 
} 

ответ

1

Не использовать null макеты. Они неизбежно приводят к неприятностям.

Из вашего фрагмента кода невозможно определить, где вы хотите, чтобы они были относительно друг друга, следующее указывает кнопку ниже графика.

По умолчанию панель содержимого использует BorderLayout. Для BorderLayout, вам нужно использовать место компоненты в различных положениях:

// the default position, but it does not hurt to be explicit 
add(graph, BorderLayout.CENTER); 

... 

// and the panel 
add(jpanel, BorderLayout.SOUTH); 

Если позиционирование не то, что вы хотите, посмотрите на visual guide to layout managers выбрать менеджер компоновки, который соответствует вашим потребностям.

На панели кнопок звонки setLocation() и setSize() бесполезны. Менеджер компоновки панели отвечает за настройку границ кнопки. Если значение по умолчанию FlowLayout не для вас, используйте руководство для выбора другого для панели.

+0

Спасибо за ваш ответ. Должно быть, это так. add (graph ..), хотя и не применяется в методе – user2598911

+0

Я хочу, чтобы график и кнопка были рядом друг с другом. – user2598911

+0

Добавление в рамку такое же, как добавление в область содержимого. Я не имел в виду, что они будут в одном методе, только где-то в коде. Для размещения кнопки справа от графика вы можете использовать 'BorderLayout.RIGHT'. Дополнительную информацию см. В [Учебник BorderLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html). Посмотрите также на другие образы менеджера компоновки, чтобы проверить, что-то ближе к тому, что вы хотите. – kiheru