নাল বিন্যাস সহ জেপেনেলকে কীভাবে যুক্ত করবেন?


235

আমি যোগ করতে চান JTableমধ্যে JPanelযার বিন্যাস nullJPanelঅন্যান্য উপাদান রয়েছে। আমাকে JTableযথাযথ পদে যুক্ত করতে হবে।


17
শুধু জেজেডির উত্তরের উপর জোর দেওয়ার জন্য: নাল লেআউটটি ভুলে যান। এটি অবশ্যই আন-সুইং'শ - লেআউট ম্যানেজারগুলি ব্যবহার করে শিখুন বা কোনও ভিন্ন ভাষা ব্যবহার করুন।
ক্লিওপাত্রা

উত্তর:


178

নেস্টেড / কম্বিনেশন লেআউট উদাহরণ

জাভা টিউটোরিয়ালটিতে লেআউট ম্যানেজারগুলি ব্যবহারের বিষয়ে বিস্তৃত তথ্য রয়েছে। দেখুন একটি ধারক মধ্যে ওখানকার আউট উপাদান আরও বিস্তারিত জানার জন্য পাঠ।

টিউটোরিয়ালটি ভালভাবে আচ্ছন্ন না হওয়া বিন্যাসগুলির একটি দিক হল নেস্টেড লেআউটগুলি, জটিল প্রভাবগুলি পেতে একটি লেআউটটিকে অন্যটির ভিতরে রেখে দেওয়া।

নীচের কোডটি নেস্টেড লেআউটগুলি কীভাবে ব্যবহার করতে হয় তা প্রদর্শনের জন্য একটি ফ্রেমে বিভিন্ন উপাদান রাখে। সমস্ত লেআউট যা স্পষ্টভাবে সেট করা হয় সেগুলি প্যানেলে ব্যবহৃত হয় এমন শিরোনাম-বর্ডার হিসাবে দেখানো হয়।

কোডটির উল্লেখযোগ্য দিকগুলি হ'ল:

  • রান-টাইমে পিএলএফ (প্লাগেবল লুক এবং ফিল) পরিবর্তন করার জন্য একটি কম্বো-বাক্স রয়েছে।
  • জিইউআই ব্যবহারকারীর প্রয়োজনের প্রসারণযোগ্য।
  • বিভক্ত-ফলকের নীচে চিত্রটি স্ক্রোল-ফলকে কেন্দ্র করে is
  • বামদিকে লেবেল দৃষ্টান্তগুলি বোতামটি ব্যবহার করে গতিশীলভাবে যুক্ত করা হয়েছে।

নিম্বাস পিএলএফ

NestedLayoutExample.java

import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.border.TitledBorder;

/** A short example of a nested layout that can change PLAF at runtime.
The TitledBorder of each JPanel shows the layouts explicitly set.
@author Andrew Thompson
@version 2011-04-12 */
class NestedLayoutExample {

    public static void main(String[] args) {

        Runnable r = new Runnable() {

            public void run() {
                final JFrame frame = new JFrame("Nested Layout Example");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                final JPanel gui = new JPanel(new BorderLayout(5,5));
                gui.setBorder( new TitledBorder("BorderLayout(5,5)") );

                //JToolBar tb = new JToolBar();
                JPanel plafComponents = new JPanel(
                    new FlowLayout(FlowLayout.RIGHT, 3,3));
                plafComponents.setBorder(
                    new TitledBorder("FlowLayout(FlowLayout.RIGHT, 3,3)") );

                final UIManager.LookAndFeelInfo[] plafInfos =
                    UIManager.getInstalledLookAndFeels();
                String[] plafNames = new String[plafInfos.length];
                for (int ii=0; ii<plafInfos.length; ii++) {
                    plafNames[ii] = plafInfos[ii].getName();
                }
                final JComboBox plafChooser = new JComboBox(plafNames);
                plafComponents.add(plafChooser);

                final JCheckBox pack = new JCheckBox("Pack on PLAF change", true);
                plafComponents.add(pack);

                plafChooser.addActionListener( new ActionListener(){
                    public void actionPerformed(ActionEvent ae) {
                        int index = plafChooser.getSelectedIndex();
                        try {
                            UIManager.setLookAndFeel(
                                plafInfos[index].getClassName() );
                            SwingUtilities.updateComponentTreeUI(frame);
                            if (pack.isSelected()) {
                                frame.pack();
                                frame.setMinimumSize(frame.getSize());
                            }
                        } catch(Exception e) {
                            e.printStackTrace();
                        }
                    }
                } );

                gui.add(plafComponents, BorderLayout.NORTH);

                JPanel dynamicLabels = new JPanel(new BorderLayout(4,4));
                dynamicLabels.setBorder(
                    new TitledBorder("BorderLayout(4,4)") );
                gui.add(dynamicLabels, BorderLayout.WEST);

                final JPanel labels = new JPanel(new GridLayout(0,2,3,3));
                labels.setBorder(
                    new TitledBorder("GridLayout(0,2,3,3)") );

                JButton addNew = new JButton("Add Another Label");
                dynamicLabels.add( addNew, BorderLayout.NORTH );
                addNew.addActionListener( new ActionListener(){

                    private int labelCount = 0;

                    public void actionPerformed(ActionEvent ae) {
                        labels.add( new JLabel("Label " + ++labelCount) );
                        frame.validate();
                    }
                } );

                dynamicLabels.add( new JScrollPane(labels), BorderLayout.CENTER );

                String[] header = {"Name", "Value"};
                String[] a = new String[0];
                String[] names = System.getProperties().
                    stringPropertyNames().toArray(a);
                String[][] data = new String[names.length][2];
                for (int ii=0; ii<names.length; ii++) {
                    data[ii][0] = names[ii];
                    data[ii][1] = System.getProperty(names[ii]);
                }
                DefaultTableModel model = new DefaultTableModel(data, header);
                JTable table = new JTable(model);
                try {
                    // 1.6+
                    table.setAutoCreateRowSorter(true);
                } catch(Exception continuewithNoSort) {
                }
                JScrollPane tableScroll = new JScrollPane(table);
                Dimension tablePreferred = tableScroll.getPreferredSize();
                tableScroll.setPreferredSize(
                    new Dimension(tablePreferred.width, tablePreferred.height/3) );

                JPanel imagePanel = new JPanel(new GridBagLayout());
                imagePanel.setBorder(
                    new TitledBorder("GridBagLayout()") );

                BufferedImage bi = new BufferedImage(
                    200,200,BufferedImage.TYPE_INT_ARGB);
                Graphics2D g = bi.createGraphics();
                GradientPaint gp = new GradientPaint(
                    20f,20f,Color.red, 180f,180f,Color.yellow);
                g.setPaint(gp);
                g.fillRect(0,0,200,200);
                ImageIcon ii = new ImageIcon(bi);
                JLabel imageLabel = new JLabel(ii);
                imagePanel.add( imageLabel, null );

                JSplitPane splitPane = new JSplitPane(
                    JSplitPane.VERTICAL_SPLIT,
                    tableScroll,
                    new JScrollPane(imagePanel));
                gui.add( splitPane, BorderLayout.CENTER );

                frame.setContentPane(gui);

                frame.pack();

                frame.setLocationRelativeTo(null);
                try {
                    // 1.6+
                    frame.setLocationByPlatform(true);
                    frame.setMinimumSize(frame.getSize());
                } catch(Throwable ignoreAndContinue) {
                }

                frame.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

অন্যান্য স্ক্রিন শট

উইন্ডোজ পিএলএফ

ম্যাক ওএস এক্স একোয়া পিএলএফ

উবুন্টু জিটিকে + পিএলএফ


49

নাল লেআউট ব্যবহার করবেন না। লেআউট ম্যানেজারগুলি ব্যবহার করতে শিখুন:

http://download.oracle.com/javase/tutorial/uiswing/layout/using.html

লেআউটম্যানেজারগুলি আপনাকে জিনিসগুলির উইন্ডো আকার পরিবর্তন বা গতিশীল উপাদান গণনাগুলি সঠিকভাবে পরিচালনা করতে দেয়। এগুলি প্রথমে ভীতিজনক বলে মনে হতে পারে তবে তারা শেখার প্রচেষ্টার পক্ষে মূল্যবান।


20

যেমনটি আমি মনে করতে পারি, নাল বিন্যাসের অর্থ একটি নিখুঁত অবস্থান তাই আপনার জেটিবেল বাম উপরের কোণার অবস্থানের জন্য X পয়েন্টটি গণনা করা আপনার পক্ষে শক্ত hard তবে আপনি যদি কেবল একটি করে সমস্ত প্যানেল উপাদান রাখতে চান তবে আপনি ফ্লোলআউট () ম্যানেজার হিসাবে ব্যবহার করতে পারেন

JPanel panel=new JPanel(new FlowLayout());
panel.add(new aComponent());
panel.add(new bComponent());
panel.add(new JTable());

অথবা যদি আপনাকে প্যানেলটি পূরণ করতে হয় তবে আপনার গ্রিডলআউট () এর হিসাবে ব্যবহার করা উচিত ...

int x=2,y=2;
JPanel panel=new JPanel(new GridLayout(y,x));
panel.add(new aComponent());
panel.add(new bComponent());
panel.add(new JTable());

শুভকামনা


16

আপনি যদি নাল লেআউট ম্যানেজার ব্যবহার করে থাকেন তবে আপনাকে সর্বদা একটি উপাদানটির সীমানা নির্ধারণ করতে হবে। আপনার ক্ষেত্রে এটিই সমস্যা।

এখানে প্রত্যেকের পরামর্শ অনুসারে আপনার করা উচিত এবং কিছু লেআউট ম্যানেজার ব্যবহার করে বিশ্বাস করুন যে তারা সময় সাশ্রয় করে। @ জজেডির পোস্টে টিউটোরিয়ালটি দেখুন।

উপভোগ করুন, বোরো।


12

JTableমধ্যে যোগ করতে হবে JScrollPaneযা আসলে মধ্যে যোগ দিতে হবে JPanel

এর JPanelকিছু লেআউট ম্যানেজার থাকা উচিত।

আপনি উপাদান স্পষ্টতা যত্নশীল না থাকে তাহলে আপনি বিশুদ্ধ ব্যবহার করতে পারেন আকার BorderLayoutএবং সঙ্গে এটি একত্রিত FlowLayoutএবং GridLayout। আপনার যদি নির্ভুলতার প্রয়োজন হয় - জগুডি ব্যবহার করুন FormLayout

FormLayoutসত্যিই চতুর এক, কিন্তু আপনার সাথে একটু খেলা করতে পারেন WindowBuilder(যা অন্ধকার মধ্যে এমবেড করা হয়) এবং কোড তা উত্পন্ন কটাক্ষপাত। এটি জটিল দেখাচ্ছে তবে এটি কেবল একটি অজ্ঞতা।

শুভকামনা।


6

প্রথমত, আপনার অন্যান্য লেআউট পরিচালকদের গুরুত্ব সহকারে বিবেচনা করা উচিত, উদাহরণস্বরূপ বর্ডারলাউটম্যানেজার (নতুন জেপানেল (নতুন বর্ডারলআউট ())) একটি ভাল শুরু।

এছাড়াও আপনার ডায়ালগটি ডিজাইন করার সময়, মনে রাখবেন যে আপনি আপনার বিন্যাসগুলি বাসাতে পারেন এবং করা উচিত : একটি জেপানেল অন্য জেপানেলের অভ্যন্তরে (যেমন একটি বর্ডারলআউটের অভ্যন্তরে গ্রিডলাউট)। দয়া করে নোট করুন: একটি 'ভাল' কথোপকথনের যথাযথ আকার পরিবর্তন করতে হবে , যাতে ব্যবহারকারী যদি আপনার ফ্রেমের আকার পরিবর্তন করেন তবে আপনি স্বয়ংক্রিয়ভাবে আপনার তথ্য সারণী যেমন আপনার টেবিলকে প্রসারিত করতে চান এবং জেপ্যানেল ব্যাকগ্রাউন্ডের বৃহত অঞ্চলগুলি প্রদর্শন না করেন। এটি এমনই একটি জিনিস যা আপনি নুলআউটআউট দিয়ে অর্জন করতে পারবেন না।

তবে সম্ভবত এমন কেস রয়েছে - কোথাও এই বড় বিশ্বের - যেখানে একটি নললআউট হ'ল জিনিস। সুতরাং এখানে একটি উদাহরণ:

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class JTableInNullLayout
{
  public static void main(String[] argv) throws Exception {

      DefaultTableModel model = new DefaultTableModel(
          new String[][] { { "a", "123"} , {"b", "456"} }, 
          new String[] { "name", "value" } );

      JTable t = new JTable(model);

      JPanel panel = new JPanel(null);

      JScrollPane scroll = new JScrollPane(t);
      scroll.setBounds( 0, 20, 150, 100 ); // x, y, width, height
      panel.add(scroll);

      JFrame frame = new JFrame();
      frame.add(panel);
      frame.setPreferredSize( new Dimension(200,200));
      frame.pack();
      frame.setVisible(true);
  }
}

1

যখন কোনও উপাদানটির "নাল" লেআউট থাকে, আপনাকে নিজেরাই লেআউটটি পরিচালনা করতে হবে, এর অর্থ আপনাকে উপাদানটির বাচ্চাদের কোথায় আঁকবে তা নির্ধারণ করার জন্য মাত্রা এবং অবস্থানগুলি গণনা করতে হবে। একেবারে প্রয়োজনীয় না হলে বেশ ক্লান্তিকর।

আপনি যদি সত্যিই সেই সূক্ষ্ম দানা নিয়ন্ত্রণ করতে চান তবে ইউআই বিন্যাসের সাথে কাঁদা দেওয়ার আগে প্রথমে গ্রিডব্যাগলয়েট চেষ্টা করুন।


0

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন। জেপবেলকে জেপ্যানেলে যুক্ত করতে।

JPanel panel = new JPanel();
this.setContentPane(panel);
panel.setLayout(null);
String data[][] = {{"1.", "ABC"}, {"2.", "DEF"}, {"3.", "GHI" }};
String col[] = {"Sr. No", "Name"};
JTable table = new JTable(data,col);
table.setBounds(100, 100, 100, 80);
panel.add(table);
setVisible(true);
setSize(300,300);

0
JPanel panel = new JPanel();
JTable table = new JTable(rowData, colData);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane, BorderLayout.CENTER);
panel.setSize(800, 150);
panel.add(table);
panel.setLocationRelativeTo(null);
panel.setVisible(true);

আশাকরি এটা সাহায্য করবে.


না ... টানা তিন লাইনে তিনটি ত্রুটি এবং প্রয়োজনীয়তাটি সমাধান না করে
ক্লিওপাত্রা

প্যানেলের পরিবর্তে ফ্রেম ব্যবহার করুন এবং চেষ্টা করুন।
লিও

আপনি নিজের ত্রুটিগুলি খুঁজে পাওয়ার চেষ্টা করেননি, তাই না? কখনও কখনও (এখনকার মতো) কোড / উত্তরে যত ত্রুটি রয়েছে ততই আমি সত্যিকার অর্থেই অনেকগুলি ডাউনওয়েট রাখতে চাই ...
ক্লিওপেট্রা

কোন তিনটি লাইন? রোডটাটা এবং কোল্ডটা আপনাকে যোগ করতে হবে।
লিও

4, 5, 6 (এবং শেষ)
ক্লিওপেট্রা

0
JFrame frame = new JFrame("Sample Frame");
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
        DefaultTableModel dfm = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(dfm);
        JScrollPane scrollPane = new JScrollPane(table);
    panel.add(scrollPane);
frame.add(panel);
frame.setVisible(true);

টেবিল মডেল আপনার প্রয়োজন উপর নির্ভর করে


0
this.setTitle("Sample");
        JPanel p = new JPanel(new BorderLayout());
        WindowEvent we = new WindowEvent(this, WindowEvent.WINDOW_CLOSED);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        }); 
        // Create columns names
        String columnNames[] = { "FirstCol", "SecondCol",
                "ThirdCol", "FourthCol" };
        dataModel = new DefaultTableModel();
        for (int col = 0; col < columnNames.length; col++) {
            dataModel.addColumn(columnNames[col]);
        }
        // Create a new table instance
        table = new JTable(dataModel);
        table.setPreferredScrollableViewportSize(new Dimension(200, 120));
        table.setFillsViewportHeight(true);
        table.setShowGrid(true);
        table.setAutoscrolls(true);

        // Add the table to a scrolling pane
        scrollPane = new JScrollPane(table,
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setPreferredSize(new Dimension(700, 700));
        JPanel jpResultPanel = new JPanel();
        jpResultPanel.setBorder(BorderFactory.createTitledBorder(
                BorderFactory.createEtchedBorder(), "Result",
                TitledBorder.CENTER, TitledBorder.TOP));
        jpResultPanel.add(scrollPane);
        add(jpResultPanel);
        pack();
        setSize(720, 720);
        setVisible(true);

এটা চেষ্টা কর.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.